package cn.yunhe.pojo;

import cn.yunhe.exception.OutOfStockException;
import cn.yunhe.util.LogPhoneUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

public class LogPhoneAspect {

    public void before111(JoinPoint joinPoint){
        String methodName=joinPoint.getSignature().getName();
        Object[] objects=joinPoint.getArgs();
        if ("buyPhone".equals(methodName)){
            System.out.println("[前置通知日志11："+LogPhoneUtil.getCurrentTime() +"即将执行"+methodName+"方法，将要购买手机数量"+objects[0]+"]");
        }
        if ("salePhone".equals(methodName)){
            System.out.println("[前置通知日志11："+LogPhoneUtil.getCurrentTime() +"即将执行"+methodName+"方法，将要出售手机数量"+objects[0]+"]");
        }
    }

    public void afterReturining111(JoinPoint joinPoint){
        String methodName=joinPoint.getSignature().getName();
        if ("buyPhone".equals(methodName)){
            System.out.println("[正常完成后通知的日志11："+LogPhoneUtil.getCurrentTime() +"完成"+methodName+"方法]");
        }
        if ("salePhone".equals(methodName)){
            System.out.println("[正常完成后通知的日志11："+LogPhoneUtil.getCurrentTime() +"完成"+methodName+"方法]");
        }
    }

    public void afterThrowing111(JoinPoint joinPoint, OutOfStockException e){
        String methodName=joinPoint.getSignature().getName();
        if ("salePhone".equals(methodName)){
            System.out.println("[异常通知日志11："+LogPhoneUtil.getCurrentTime() +"执行"+methodName+"方法，抛出异常,库存量不足，"+e.getMessage()+"]");
        }
    }

    public void after111(JoinPoint joinPoint){
        String methodName=joinPoint.getSignature().getName();
        Object[] objects=joinPoint.getArgs();
        if ("buyPhone".equals(methodName)){
            System.out.println("[最终通知日志11："+LogPhoneUtil.getCurrentTime() +"最终执行"+methodName+"方法，即使发生异常也一定执行]");
        }
        if ("salePhone".equals(methodName)){
            System.out.println("[最终通知日志11："+LogPhoneUtil.getCurrentTime() +"最终执行"+methodName+"方法，即使发生异常也一定执行]");
        }
    }

    public Object around111(ProceedingJoinPoint proceedingJoinPoint){
        String methodName=proceedingJoinPoint.getSignature().getName();

        Long begin=System.currentTimeMillis();
        System.out.println("[环绕通知日志11："+LogPhoneUtil.getCurrentTime()+" 开始执行"+methodName+"方法]");

        try {
            return proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            return null;
        } finally {
            Long end=System.currentTimeMillis();
            System.out.println("[环绕通知日志11："+LogPhoneUtil.getCurrentTime()+" 结束执行"+methodName+"方法，共消耗时间 "+(end-begin)+" 毫秒]");
        }

    }



}
